"""
    鸢尾花识别
        - iris
        - 项目需求：有3个子品种，想通过机器学习算法来做分类预测
        - 进一步思考：
            - 任务：给定一朵花，让模型去识别到底是哪个子品种
            - 输入：一朵花
                - 一朵花不能直接输入计算机
                - 特征工程：
                    - 数字化转型
                    - 抽取/构建跟这朵花类别有关系的特征，来代表这朵花
                        - 跟业务专家咨询：
                            - 花萼长度 x1
                            - 花萼宽度 x2
                            - 花瓣长度 x3
                            - 花瓣宽度 x4
            - 输出：子品种
                - 分类问题：
                    - 对状态进行编码：
                        - N个状态：
                            - 0，...，N-1
                        - 3个类别：
                            - 0
                            - 1
                            - 2
"""
from sklearn.datasets import load_iris
# 加载数据
X, y = load_iris(return_X_y=True)
print(X.shape)
print(y.shape)

# 切割数据
from sklearn.model_selection import train_test_split
# test_size=0.2 20%做测试集的意思
# random_state=0
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 套用一个模型
from sklearn.neighbors import KNeighborsClassifier
# 实例化一个模型的对象
knn = KNeighborsClassifier()
# 训练模型
knn.fit(X=X_train, y=y_train)
# 模型预测
y_pred = knn.predict(X=X_test)

print(y_pred)
print(y_test)

# 模型评估,false代表预测错误
print(y_pred == y_test)
# 准确率
import numpy as np
acc = np.mean(y_pred == y_test)
print(acc)

# 保存模型
import joblib
joblib.dump(value=knn, filename='knn.model')

# 加载模型
model = joblib.load(filename='knn.model')

# 推理
model.predict([[5.1, 3.5, 1.4, 0.2]])